import axios from "axios";
import { AroundResultType} from "../myTypes"

axios.defaults.baseURL = "https://www.mutongyou.cn/";

export interface Data { 
  code?: number | string  // 验证码
  tel?: number | string   // 电话号码
  pageNum?: number        // 翻页参数
  pageSize?: number       // 请求数据的数量
  area?: string           // 地区
  theme?: number          // 首页猜你喜欢/热门去处/我的关注
  accountId?: number | string   // 用户token
  userId?: number | string      // 用户token
  priceDown?:string    // 最低价格
  priceUp?:string      // 最高价格
  orderBy?: string     // 周边导航
  themeIdArr?: string   // 周边筛选条件
  signature?: string      // 用户的描述信息
  circleId?: string    // 逛逛页面数据id
  commentId?: string
  authorId?: string | undefined // 喜欢请求参数
  type?: string | null |0 | 1 | 2    // 作者的类型 
  title?: string //活动标题
  content?: string
  headfigure?: string // 活动封面图
  authorName?: string // 作者昵称
  avatar?: string   // 作者头像
  id?: string
  pid?: number | string
  createTime?: string | undefined
  receiverId?: string | undefined
  senderId?: string | undefined
  isWrap?: number | undefined
  status?: number | undefined
  receiverType?: string | undefined | null 
  senderType?: string | undefined
  love?: string
  sonId?: string
  storeId?: string | number
  nickName?: string
  headImg?:string
  sex?: string | null
  birthday?: string
  goodsId?: number
}

/**
 * http request 拦截器
 */
axios.interceptors.request.use(
  (config) => {
    if (config.method !== "get") { 
      config.headers = {...config.headers, "Content-Type": "application/x-www-form-urlencoded"}
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

/**
 * http response 拦截器
 */
axios.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    console.log("请求出错：", error);
    return { code: 500, data: null }
  }
);


// get 请求
export async function get(url:string, params?:Data):Promise<AroundResultType> {
  return new Promise((resolve, reject) => {
    axios.get(url, {
        params: params,
    }).then((response) => {
      // 成功之后将数据返回
        resolve(response.data);
      })
      .catch((error) => {
        reject(error);
      });
  });
}

// post 请求
export async function post(url:string , data?:Data):Promise<AroundResultType> {
  return new Promise((resolve, reject) => {
    axios.post(url, data).then(
      (response) => {
        resolve(response.data);
      },
      (err) => {
        reject(err);
      }
    );
  });  
}

// delete请求
// post 请求
export async function deleteRequest(url:string , data?:Data):Promise<AroundResultType> {
  return new Promise((resolve, reject) => {
    axios({
      url,
      method: 'delete',
      data
    }).then(
      (response) => {
        resolve(response.data);
      },
      (err) => {
        reject(err);
      }
    );
  });  
}



//统一接口处理，返回数据
export default function http (fetch:string, url:string, data?:Data) {
  // fetch 请求方式
  // url   请求地址
  // params  请求参数
  // let _data = "";
    switch (fetch) {
      case "get":
        return get(url, data)
      case "post":
        return post(url, data)
      case 'delete':
        return deleteRequest(url, data)
      default:
        return console.log("不被允许的请求方式")
    }
}

